package com.niiuzu.client.util.widget.error;

import java.util.MissingResourceException;

import com.google.gwt.core.client.GWT;
import com.google.gwt.uibinder.client.UiBinder;
import com.google.gwt.uibinder.client.UiField;
import com.google.gwt.user.client.ui.Button;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.HTML;
import com.google.gwt.user.client.ui.Widget;
import com.niiuzu.client.i18n.ErrorConstantsWithLookup;

/**
 * {@link Widget} destinée à afficher le détail d'une erreur technique dans une
 * popup.
 */
public class TechnicalErrorWidget extends Composite {

	/**
	 * Interface {@link UiBinder} adaptée à la widget
	 * {@link TechnicalErrorWidget} .
	 */
	interface SuitedUiBinder extends UiBinder<Widget, TechnicalErrorWidget> {

	}

	private static ErrorConstantsWithLookup errorConstants = GWT
			.create(ErrorConstantsWithLookup.class);

	@UiField
	HTML errorDetail;
	@UiField
	Button closeButton;

	/**
	 * Construit une nouvelle instance de {@link TechnicalErrorWidget}.
	 */
	public TechnicalErrorWidget() {
		SuitedUiBinder uiBinder = GWT.create(SuitedUiBinder.class);
		initWidget(uiBinder.createAndBindUi(this));
	}

	/**
	 * Définit l'erreur qui sera affichée dans la {@link Widget}.
	 */
	public void setError(Throwable throwable) {
		String errorMessage = "";
		try {
			// Tentative de récupération du message d'erreur depuis les
			// constantes.
			errorMessage = errorConstants.getString(throwable.getMessage());
		} catch (MissingResourceException e) {
			errorMessage = throwable.getMessage();
		}
		errorDetail.setText(errorMessage);
	}

	/**
	 * Bouton destiné à fermer la popup qui contiendra cette {@link Widget}.
	 */
	public Button getCloseButton() {
		return closeButton;
	}
}
